/*
题目：用栈实现队列
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：

实现 MyQueue 类：

    void push(int x) 将元素 x 推到队列的末尾
    int pop() 从队列的开头移除并返回元素
    int peek() 返回队列开头的元素
    boolean empty() 如果队列为空，返回 true ；否则，返回 false
 */
public class MyQueue {
    Stack<Integer> stackA = new Stack<> ();
    Stack<Integer> stackB = new Stack<> ();
    //入栈的时候放在A里边，出栈的时候在B里边
    public MyQueue() {}

    public void push(int x) {
        stackA.push(x);
    }

    public int pop() {
        if (stackB.size() != 0) {
            return stackB.pop(); //如果栈B中有元素，那就弹出栈B中的元素
        }
        while (stackA.size() > 0) {
            stackB.push(stackA.pop());
        }
        return stackB.pop();
    }

    public int peek() {
        if (stackB.size() != 0) {
            return stackB.peek();
        }
        while (stackA.size() > 0) {
            stackB.push(stackA.pop());
        }
        return stackB.peek();
    }

    public boolean empty() {
        return stackA.empty() && stackB.empty();
    }
}
